package Controlador;

import Modelo.Chofer;
import Modelo.Listas;
import Modelo.Validaciones;
import Modelo.Viaje;
import Reportes.ReporteCalenAsigVehiculo;
import Vista.Mensajes;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedList;

public class ControladorReporteCalenAsigVehiculo implements ActionListener {

    private ReporteCalenAsigVehiculo formCalendario;
    private Listas LisTer;
    private LinkedList<Viaje> listaOrdenada;

    public ControladorReporteCalenAsigVehiculo(Listas LisTerminal) {
        LisTer = LisTerminal;

        formCalendario = new ReporteCalenAsigVehiculo();

        formCalendario.agregarListener(this);
        formCalendario.setVisible(true);
        formCalendario.getDateFechaInicio().setEnabled(false);
        formCalendario.getDateFechaFinal().setEnabled(false);
        formCalendario.getCmbMeses().setEnabled(false);
    }

//---------------------
    private void Mostrar() {
        limpiarTabla();
        Chofer chofer = new Chofer();
        String Nombre;
        Date FechaI;
        Date FechaF;
        int Fila;
        Viaje viaje = new Viaje();
        int PosiEmple;
        Date Fecha;
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");

        //---------ORDENAR ASIGNACIONES POR FECHA--------


        Viaje viaje_i = new Viaje();
        Viaje viaje_j = new Viaje();

        for (int i = 0; i < LisTer.getListaViajes().size() - 1; i++) 
        {
            for (int j = i + 1; j < LisTer.getListaViajes().size(); j++) 
            {
                viaje_i = LisTer.getListaViajes().get(i);
                viaje_j = LisTer.getListaViajes().get(j);

                if (viaje_i.getFechaSalida().compareTo(viaje_j.getFechaSalida()) < 0) 
                {
                    LisTer.getListaViajes().set(i, viaje_j);
                    LisTer.getListaViajes().set(j, viaje_i);
                }
            }
        }


        //------------------------


        if (formCalendario.getOpcionIntervalo().isSelected() == true) {

            if (formCalendario.getDateFechaInicio().getDate() == null) {
                Mensajes.Aviso("Ingrese una fecha inicial", "");
                return;
            }
            if (formCalendario.getDateFechaFinal().getDate() == null) {
                Mensajes.Aviso("Ingrese una fecha final", "");
                return;
            }
            FechaI = formCalendario.getDateFechaInicio().getDate();
            FechaF = formCalendario.getDateFechaFinal().getDate();
            if (FechaI.after(FechaF)) {
                Mensajes.Aviso("La fecha Inicial no puede ser mayor a la Final", "");
                return;
            }

            Fila = 0;
            for (int i = 0; i < LisTer.getListaViajes().size(); i++) {
                viaje = LisTer.getListaViajes().get(i);

                if (viaje.getFechaSalida().compareTo(Validaciones.sumarFechasDias(FechaI, -1)) >= 0 && viaje.getFechaSalida().compareTo(FechaF) <= 0) {
                    Fecha = viaje.getFechaSalida();
                    formCalendario.getjTableCalendario().setValueAt(formato.format(Fecha), Fila, 0);
                    formCalendario.getjTableCalendario().setValueAt(viaje.getPlacaVehiculo(), Fila, 1);

                    formCalendario.getjTableCalendario().setValueAt(viaje.getCiEmpleado(), Fila, 2);

                    PosiEmple = LisTer.ExisteChofer(viaje.getCiEmpleado());
                    if (PosiEmple >= 0) {
                        chofer = LisTer.getListaChoferes().get(PosiEmple);
                        formCalendario.getjTableCalendario().setValueAt(chofer.getNombres(), Fila, 3);
                    }

                    formCalendario.getjTableCalendario().setValueAt(viaje.getDestino(), Fila, 4);
                    Fila++;
                }

            }
        } else if (formCalendario.getOpcionMeses().isSelected() == true) {
            limpiarTabla();

            if (formCalendario.getCmbMeses().getSelectedIndex() <= 0) {
                Mensajes.Aviso("Seleccione un mes", "");
                return;
            }

            int mesCombo = formCalendario.getCmbMeses().getSelectedIndex();
            int mesLista;
            String fecha;
            Fila = 0;
            for (int i = 0; i < LisTer.getListaViajes().size(); i++) {
                viaje = LisTer.getListaViajes().get(i);
                fecha = formato.format(viaje.getFechaSalida());
                mesLista = Integer.parseInt(fecha.substring(4, 5));
                if (mesCombo == mesLista) {
                    Fecha = viaje.getFechaSalida();
                    formCalendario.getjTableCalendario().setValueAt(formato.format(Fecha), Fila, 0);
                    formCalendario.getjTableCalendario().setValueAt(viaje.getPlacaVehiculo(), Fila, 1);

                    formCalendario.getjTableCalendario().setValueAt(viaje.getCiEmpleado(), Fila, 2);

                    PosiEmple = LisTer.ExisteChofer(viaje.getCiEmpleado());
                    if (PosiEmple >= 0) {
                        chofer = LisTer.getListaChoferes().get(PosiEmple);
                        formCalendario.getjTableCalendario().setValueAt(chofer.getNombres(), Fila, 3);
                    }

                    formCalendario.getjTableCalendario().setValueAt(viaje.getDestino(), Fila, 4);
                    Fila++;
                }

            }
        } else {
            Mensajes.Aviso("Seleccione una opcion de periodo del reporte", "");
            return;
        }


    }

    private void limpiarTabla() {
        for (int i = 0; i < formCalendario.getjTableCalendario().getRowCount(); i++) {
            formCalendario.getjTableCalendario().setValueAt("", i, 0);
            formCalendario.getjTableCalendario().setValueAt("", i, 1);
            formCalendario.getjTableCalendario().setValueAt("", i, 2);
            formCalendario.getjTableCalendario().setValueAt("", i, 3);
            formCalendario.getjTableCalendario().setValueAt("", i, 4);
        }
    }

    private void enabled(boolean b) {
        formCalendario.getCmbMeses().setEnabled(!b);
        formCalendario.getDateFechaFinal().setEnabled(b);
        formCalendario.getDateFechaInicio().setEnabled(b);
    }
//---------------------

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource().equals(formCalendario.getjButtonMostrar())) {
            Mostrar();
            return;
        }
        if (e.getSource().equals(formCalendario.getOpcionIntervalo())) {
            enabled(true);
            return;
        }
        if (e.getSource().equals(formCalendario.getOpcionMeses())) {
            enabled(false);
            return;
        }
    }
}
